
package com.x52im.rbchat.logic.search.viewholder;

import android.content.Context;
import android.text.SpannableStringBuilder;
import android.util.Log;
import android.view.View;

import com.bumptech.glide.Glide;
import com.eva.android.widget.WidgetUtils;
import com.x52im.rbchat.R;
import com.x52im.rbchat.cache.ImageCacheLoader;
import com.x52im.rainbowchat.http.logic.dto.GroupEntity;
import com.x52im.rbchat.logic.search.content.GroupsContent;
import com.x52im.rbchat.logic.search.model.GroupContentDTO;

import androidx.fragment.app.Fragment;

/**
 * 群聊item的viewHolder对象实现类。
 *
 * @author JackJiang
 * @since 8.2
 */
public class GroupViewHolder extends AbstractViewHolder<GroupContentDTO> {

    public GroupViewHolder(Fragment fragment, View itemView) {
        super(fragment, itemView);
    }

    /**
     * 用于RecycleView的adapter中的onBindViewHolder方法。
     *
     * @param keyword           本次搜索的关键字（用于ui显示时的高亮显示）
     * @param groupContentDTO 列表item对应的数据对象引用
     * @param showCatlog        是否显示item上方的标题文本（true表示显示，否则不显示）
     */
    @Override
    public void onBind(String keyword, GroupContentDTO groupContentDTO, boolean showCatlog) {
        Context c = this.fragment.getContext();
        GroupEntity g = groupContentDTO.getGroupInfo();
        if (g == null){
            Log.w(GroupViewHolder.class.getSimpleName(), "GroupViewHolder中无效的GroupEntity，g=null!");
            return;
        }

        // 设置catlog的可见性
        itemView.findViewById(R.id.search_result_item_categoryLL).setVisibility(showCatlog?View.VISIBLE:View.GONE);
        tvCatlog.setText(showCatlog? GroupsContent.CATLOG:null);

        // 以下代码，解决Glide在RecycleView中图片错位或重复显示问题
        Glide.with(c).clear(ivAvatar);// 解决方法2
        // clear完成后设置默认占位图，确保图片显示不出现Glide导致的错位问题
        ivAvatar.setImageResource(R.drawable.groupchat_groups_icon_default_r21px);
        // 开始加载群头像
        if(g.getG_id() != null) {
            // 加载群头像
            ImageCacheLoader.loadGroupImgWithGlide(Glide.with(c), g.getG_id()
                    , ivAvatar, 7 , false
                    , R.drawable.groupchat_groups_icon_default_r21px);// 圆角单位是dp，（相当于xxhdpi下的21像素）
        }

        // 设置群名称中关键字的高亮显示并在ui上显示出来
        String gname = g.getG_name();
        SpannableStringBuilder ssb = WidgetUtils.coloredStringForSearch(c, gname, keyword, R.color.common_list_light_red_for_text);
        tvName.setText(ssb != null? ssb: gname);

        // 默认设置描述信息不显示
        tvMoreDesc.setVisibility(View.GONE);
        // 显示描述信息
        String desc = getDesc(groupContentDTO.getMachedType(), keyword);
        tvMoreDesc.setText(desc != null ? desc : "");
    }

    /**
     * 根据搜索匹配类型返回对应的描述信息。
     *
     * @param matchedType 搜索匹配类型
     * @param keyword 搜索关键字
     * @return 返回null或正常的描述信息
     */
    private String getDesc(int matchedType, String keyword){
        String desc = null;
        // 根据搜索匹配类型显示相应的描述信息
        switch (matchedType) {
            case GroupContentDTO.MACHED_TYPE_GNAME:
                break;
            case GroupContentDTO.MACHED_TYPE_MNAME: {
                tvMoreDesc.setVisibility(View.VISIBLE);
                desc = "包含: " + keyword;
                break;
            }
            case GroupContentDTO.MACHED_TYPE_ALL: {
                tvMoreDesc.setVisibility(View.VISIBLE);
                desc = "群名称和群成员都包含: " + keyword;
                break;
            }
            default:
                break;
        }
        return desc;
    }
}
